home *** CD-ROM | disk | FTP | other *** search
/ GameSpot.it / GameSpot Italia (2001).bin / demo / severancedemo / data1.cab / Program_Files / Lib / OldGameState.py < prev    next >
Encoding:
Python Source  |  2000-10-13  |  63.7 KB  |  1,732 lines

  1.  
  2.  
  3.  
  4. import Bladex
  5. import BBLib
  6. import time
  7. import types
  8. import cPickle
  9. import marshal
  10. import os
  11. import shutil
  12. import string
  13. import GameStateAux
  14.  
  15. DefaultValues={}
  16.  
  17.  
  18. ##cPickle.persistent_id=GameStateAux.persistent_id
  19. ##cPickle.persistent_load=GameStateAux.persistent_load
  20.  
  21.  
  22. DefaultValues["SendSectorMsgs"]=0
  23. DefaultValues["SendTriggerSectorMsgs"]=0
  24. DefaultValues["FiresIntensity"]=[]
  25. DefaultValues["Lights"]=[]
  26. DefaultValues["CanUse"]=0
  27. DefaultValues["AngVel"]=0.0
  28. DefaultValues["FlickPeriod"]=1.0
  29. DefaultValues["SizeFactor"]=1.0
  30. DefaultValues["Flick"]=1
  31. DefaultValues["RasterModeZ"]="Full"
  32. DefaultValues["FireParticleType"]=None
  33. DefaultValues["RasterModeAlpha"]="BlendingAlpha"
  34. DefaultValues["Alpha"]=1.0
  35. DefaultValues["Scale"]=1.0
  36. DefaultValues["Velocity"]=(0.0, 0.0, 0.0)
  37. DefaultValues["Slash"]=0.0
  38. DefaultValues["Gravity"]=(0.0, 9800.0, 0.0)
  39. DefaultValues["ContinuousDamage"]=0
  40. DefaultValues["TestHit"]=1
  41. DefaultValues["AngularVelocity"]=(0.0, 0.0, 0.0)
  42. DefaultValues["CastShadows"]=1
  43. DefaultValues["Orientation"]=(1.0, 0.0, 0.0, 0.0)
  44. DefaultValues["MaxAmplitude"]=400.0
  45. DefaultValues["MinSectorLength"]=1000000.0
  46. DefaultValues["UseFunc"]=None
  47. DefaultValues["SubscribedLists"]=[]
  48. DefaultValues["InternalState"]=None
  49. DefaultValues["CombatGroup"]=None
  50. #DefaultValues["BlockingPropensity"]=0.0
  51. DefaultValues["Wuea"]=0.0
  52. DefaultValues["PartialLevel"]=0
  53. DefaultValues["Sneak"]=0
  54. DefaultValues["Run"]=0
  55. DefaultValues["Blind"]=0
  56. DefaultValues["GoToSneaking"]=0
  57. DefaultValues["Tl"]=0
  58. DefaultValues["Aim"]=0
  59. DefaultValues["Gob"]=0
  60. DefaultValues["Tr"]=0
  61. DefaultValues["Gof"]=0
  62. DefaultValues["ContinuousBlock"]=0
  63. DefaultValues["TrailMode"]=0
  64. DefaultValues["WeaponMode"]=0
  65. DefaultValues["StaticWeaponMode"]=0
  66. DefaultValues["ExclusionMask"]=-1
  67. DefaultValues["ObjectName"]=None
  68. DefaultValues["PersonNodeName"]=None
  69. DefaultValues["PersonName"]=None
  70.  
  71. ##NotSave=["Entity Sound","Entity Person"]
  72. #NotSave=["Entity Sound"]
  73. NotSave=[]
  74.  
  75.  
  76.  
  77.  
  78. def SavePickDataAux(file,aux_dir,data,assign):
  79.     if type(data)==types.MethodType:
  80.         print "SavePickDataAux() -> Skipping method"
  81.         return
  82.  
  83.     if(data):
  84.         try:
  85. ##            if data.has_key(ObjId):
  86.             if GameStateAux.LoadedPickledData.has_key(data.ObjId):
  87. ##                print "SavePickDataAux() -> Found ",data.ObjId,"in GameStateAux.LoadedPickledData"
  88.                 return
  89.         except:
  90.             pass
  91.  
  92.         filename="%s/%s.dat"%(aux_dir,id(data))
  93.         if os.path.exists(filename):
  94. ##            print "SavePickDataAux() -> Found",filename,"for object",data
  95.             return
  96.  
  97. ##        print "SavePickDataAux() -> Saving",data,"in",filename
  98.         funcfile=open(filename,"wt")
  99.         p=cPickle.Pickler(funcfile)
  100.         p.persistent_id=GameStateAux.persistent_id
  101.         p.dump(data)
  102.         funcfile.close()
  103.  
  104.         restorestring='GameStateAux.GetPickledData("%s")'%(filename,)
  105.         file.write(assign%(restorestring,))
  106.  
  107.  
  108. def SavePickledObjects(file,aux_dir):
  109.     import ObjStore
  110.     filename="%s/%s.dat"%(aux_dir,"DinObjs")
  111.  
  112. ##    print "SavePickledObjects() -> Saving in",filename
  113.     funcfile=open(filename,"wt")
  114.     p=cPickle.Pickler(funcfile)
  115.     p.dump(ObjStore.ObjectsStore)
  116.     funcfile.close()
  117.  
  118.     file.write('GameStateAux.GetPickledObjects("%s")\n'%(filename,))
  119.  
  120.  
  121.  
  122.  
  123. class EntityState:
  124.     def __init__(self,entity):
  125.         self.CreationProps={}
  126.         self.Props={}
  127.         self.SpecialProps={}
  128.  
  129.         self.CreationProps["Name"]=entity.Name
  130.         self.CreationProps["Kind"]=entity.Kind
  131.         self.CreationProps["Position"]=entity.Position
  132.         self.Props["SendSectorMsgs"]=entity.SendSectorMsgs
  133.         self.Props["SendTriggerSectorMsgs"]=entity.SendTriggerSectorMsgs
  134.         self.Props["Mass"]=entity.Mass
  135.  
  136.         self.SpecialProps["InternalState"]=entity.InternalState
  137.  
  138.         self.SpecialProps["SubscribedLists"]=entity.SubscribedLists
  139.         self.SpecialProps["CanUse"]=entity.CanUse
  140.         self.SpecialProps["Parent"]=entity.Parent     #S≤lo Lectura
  141.         self.SpecialProps["Data"]=entity.Data
  142.         self.SpecialProps["CanUse"]=entity.CanUse
  143.  
  144.         self.SpecialProps["FrameFunc"]=entity.FrameFunc
  145.         self.SpecialProps["HitFunc"]=entity.HitFunc
  146.         self.SpecialProps["InflictHitFunc"]=entity.InflictHitFunc
  147.         self.SpecialProps["DamageFunc"]=entity.DamageFunc
  148.         self.SpecialProps["TimerFunc"]=entity.TimerFunc
  149.         self.SpecialProps["HearFunc"]=entity.HearFunc
  150.         self.SpecialProps["UseFunc"]=entity.UseFunc
  151.         self.SpecialProps["SeeFunc"]=entity.SeeFunc
  152.         self.SpecialProps["StickFunc"]=entity.StickFunc
  153.         #self.SpecialProps["ChangeNodeFunc"]=entity.ChangeNodeFunc
  154.  
  155.         # Esta la trato como caso especial.
  156.         self.InWorld=entity.InWorld
  157.  
  158.     def SaveCreation(self,file,aux_dir):
  159.         file.write('\n\n\n')
  160.         file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f)\n' %
  161.                     (self.CreationProps["Name"],
  162.                      self.CreationProps["Kind"],
  163.                      self.CreationProps["Position"][0],
  164.                      self.CreationProps["Position"][1],
  165.                      self.CreationProps["Position"][2]
  166.                     )
  167.                   )
  168.  
  169.  
  170.     def SaveProperties(self,file,aux_dir):
  171.         SpecialNames=self.SpecialProps.keys()
  172.         for i in self.Props.keys():
  173.             if i not in SpecialNames:
  174.                 value=self.Props[i]
  175.                 if not (DefaultValues.has_key(i) and DefaultValues[i]==value):
  176.                     if type(value) is types.StringType:
  177.                         file.write('o.%s="%s"\n'%(i,value))
  178.                     else:
  179.                         file.write('o.%s=%s\n'%(i,value))
  180.         if not self.InWorld:
  181.             file.write('o.RemoveFromWorld()\n')
  182.         file.write('\n')
  183.  
  184.  
  185. ##    def __SaveCallbackFunction(self,filename,function):
  186. ##        funcfile=open(filename,"wt")
  187. ##        p=cPickle.Pickler(funcfile)
  188. ##        p.dump(function)
  189. ##        funcfile.close()
  190. ##        print "Saving Function for ",self.CreationProps["Name"],"in",funcfile
  191.  
  192.     def SaveSpecialProperties(self,file,aux_dir):
  193.         name=self.CreationProps["Name"]
  194.  
  195.         funcs=( ("UseFunc","usefnc"),
  196.                 ("FrameFunc","frmfnc"),
  197.                 ("HitFunc","hitfnc"),
  198.                 ("InflictHitFunc","ihitfnc"),
  199.                 ("DamageFunc","dmgfnc"),
  200.                 ("TimerFunc","tmrfnc"),
  201.                 ("HearFunc","hearfnc"),
  202.                 ("SeeFunc","seefnc"),
  203.                 ("StickFunc","stkfnc")
  204.               )
  205.  
  206.         for i in funcs:
  207.             curr_func=self.SpecialProps[i[0]]
  208.             f_rest_string="o.%s="%(i[0])
  209.             SavePickDataAux(file,aux_dir,curr_func,f_rest_string+'%s\n')
  210.  
  211.         if self.SpecialProps["SubscribedLists"]:
  212.             file.write('GameStateAux.SetSubscribedLists(o,%s)\n'%self.SpecialProps["SubscribedLists"])
  213.  
  214.         if self.SpecialProps["InternalState"]:
  215.             value=self.SpecialProps["InternalState"]
  216.             if not (DefaultValues.has_key("InternalState") and DefaultValues["InternalState"]==value):
  217.                 if type(value) is types.StringType:
  218.                     file.write('o.InternalState="%s"\n'%(value))
  219.                 else:
  220.                    file.write('o.InternalState=%s\n'%(str(value)))
  221.             file.write('\n')
  222.  
  223.     def SaveState(self,file,aux_dir):
  224.         self.SaveCreation(file,aux_dir)
  225.         self.SaveProperties(file,aux_dir)
  226.  
  227.  
  228.     def SaveStatePass2(self,file,aux_dir):
  229. ##        print "SaveStatePass2",self.CreationProps["Name"]
  230.         file.write('o=Bladex.GetEntity("%s")\n'%(self.CreationProps["Name"]))
  231.         self.SaveSpecialProperties(file,aux_dir)
  232.         data=self.SpecialProps["Data"]
  233.         SavePickDataAux(file,aux_dir,data,'o.Data=%s\n\n\n\n')
  234.  
  235.  
  236. class EntitySpotState(EntityState):
  237.     def __init__(self,entity):
  238.         EntityState.__init__(self,entity)
  239.         self.Props["Flick"]=entity.Flick
  240.         self.Props["Visible"]=entity.Visible
  241.         self.Props["CastShadows"]=entity.CastShadows
  242.         #self.Props["GlowTexture"]=entity.CastShadows #S≤lo Escritura
  243.         #self.Props["GlowTestZ"]=entity.CastShadows   #S≤lo Escritura
  244.         self.Props["Intensity"]=entity.Intensity
  245.         self.Props["Precission"]=entity.Precission
  246.         self.Props["AngVel"]=entity.AngVel
  247.         self.Props["SizeFactor"]=entity.SizeFactor
  248.         self.Props["Intensity2"]=entity.Intensity2
  249.         self.Props["FlickPeriod"]=entity.FlickPeriod
  250.         self.Props["Color"]=entity.Color
  251.  
  252.  
  253.     def SaveCreation(self,file,aux_dir):
  254.         if not self.SpecialProps["Parent"]:
  255.             EntityState.SaveCreation(self,file,aux_dir)
  256.         else:
  257.             parent=Bladex.GetEntity(self.SpecialProps["Parent"])
  258.             if parent.Person:
  259.                 EntityState.SaveCreation(self,file,aux_dir)
  260.  
  261.  
  262.     def SaveProperties(self,file,aux_dir):
  263.         if not self.SpecialProps["Parent"]:
  264.             EntityState.SaveProperties(self,file,aux_dir)
  265.         else:
  266.             parent=Bladex.GetEntity(self.SpecialProps["Parent"])
  267.             if parent.Person:
  268.                 EntityState.SaveProperties(self,file,aux_dir)
  269.  
  270.  
  271. class EntityObjectState(EntityState):
  272.     def __init__(self,entity):
  273.         EntityState.__init__(self,entity)
  274.         #self.Props["nLights"]=entity.nLights
  275.         #self.Props["LightGlow"]=entity.LightGlow
  276.         self.Props["CastShadows"]=entity.CastShadows
  277.         self.Props["Scale"]=entity.Scale
  278.         self.Props["FiresIntensity"]=entity.FiresIntensity
  279.         self.Props["Lights"]=entity.Lights
  280.         #self.Props["nFires"]=entity.nFires
  281.         #self.Props["Solids"]=entity.Solids
  282.         #self.Props["LightIntensity"]=entity.LightIntensity
  283.         #self.Props["LightPrecission"]=entity.LightPrecission
  284.         #self.Props["LightColor"]=entity.LightColor
  285.         self.Props["Alpha"]=entity.Alpha
  286.         self.Props["FireParticleType"]=entity.FireParticleType
  287. ##        self.Props["RasterModeZ"]=entity.RasterModeZ #Chapuza de Jose y Manuel
  288. ##        self.Props["RasterModeAlpha"]=entity.RasterModeAlpha #Chapuza de Jose y Manuel
  289.         self.Props["Orientation"]=entity.Orientation        
  290.         self.Props["ExclusionMask"]=entity.ExclusionMask
  291.  
  292.  
  293.  
  294. class EntityPhysicState(EntityObjectState):
  295.     def __init__(self,entity):
  296.         EntityObjectState.__init__(self,entity)
  297.         self.Props["Velocity"]=entity.Velocity
  298.         self.Props["Gravity"]=entity.Gravity
  299.         self.Props["AngularVelocity"]=entity.AngularVelocity
  300. #       self.SpecialProps["OnStopFunc"]=entity.OnStopFunc
  301. ##        self.SpecialProps["TestHit"]=entity.TestHit
  302.  
  303.     def SaveCreation(self,file,aux_dir):
  304.         file.write('\n\n\n')
  305.         try:
  306.             file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f,"Physic")\n' %
  307.                     (self.CreationProps["Name"],
  308.                      self.CreationProps["Kind"],
  309.                      self.CreationProps["Position"][0],
  310.                      self.CreationProps["Position"][1],
  311.                      self.CreationProps["Position"][2]
  312.                     )
  313.                   )
  314.         except Exception,exc:
  315.             print "Warning: Saving Physic entity failed"
  316.             print self.CreationProps["Name"],exc
  317.  
  318. #    def SaveSpecialProperties(self,file,aux_dir):
  319. #        EntityObjectState.SaveSpecialProperties(self,file,aux_dir)
  320. #        SavePickDataAux(file,aux_dir,self.SpecialProps["OnStopFunc"],'o.OnStopFunc=%s\n')
  321. #        SavePickDataAux(file,aux_dir,self.SpecialProps["TestHit"],'o.TestHit=%s\n')
  322.  
  323.  
  324. class EntityWeaponState(EntityPhysicState):
  325.     def __init__(self,entity):
  326.         EntityPhysicState.__init__(self,entity)
  327.         self.Props["ContinuousDamage"]=entity.ContinuousDamage
  328.         self.Props["Radius"]=entity.Radius
  329.         self.Props["Height"]=entity.Height
  330.         self.Props["Cone"]=entity.Cone
  331.         self.Props["TrailColor"]=entity.TrailColor
  332.         self.Props["TrailLifeTime"]=entity.TrailLifeTime
  333.         self.Props["TrailMode"]=entity.TrailMode
  334.         self.Props["WeaponMode"]=entity.WeaponMode
  335.         self.Props["StaticWeaponMode"]=entity.StaticWeaponMode
  336.  
  337.     def SaveCreation(self,file,aux_dir):
  338.         file.write('\n\n\n')
  339.         try:
  340.             file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f,"Weapon")\n' %
  341.                     (self.CreationProps["Name"],
  342.                      self.CreationProps["Kind"],
  343.                      self.CreationProps["Position"][0],
  344.                      self.CreationProps["Position"][1],
  345.                      self.CreationProps["Position"][2]
  346.                     )
  347.                   )
  348.         except Exception,exc:
  349.             print "Warning: Saving Weapon entity failed"
  350.             print self.CreationProps["Name"],exc
  351.  
  352.  
  353. class EntityActorState(EntityObjectState):
  354.     def __init__(self,entity):
  355.         EntityObjectState.__init__(self,entity)
  356.         self.Props["Frame"]=entity.Frame
  357.         self.Props["Animation"]=entity.Animation
  358.         self.Props["OnAnimationEndFunc"]=entity.OnAnimationEndFunc
  359.         self.Props["OnPathNodeFunc"]=entity.OnPathNodeFunc
  360.         #self.Props["FPS"]=entity.FPS  #S≤lo Escritura
  361.  
  362.  
  363.  
  364. class EntityArrowState(EntityWeaponState):
  365.     def __init__(self,entity):
  366.         EntityWeaponState.__init__(self,entity)
  367.  
  368.     def SaveCreation(self,file,aux_dir):
  369.         file.write('\n\n\n')
  370.         try:
  371.             file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f,"Arrow")\n' %
  372.                     (self.CreationProps["Name"],
  373.                      self.CreationProps["Kind"],
  374.                      self.CreationProps["Position"][0],
  375.                      self.CreationProps["Position"][1],
  376.                      self.CreationProps["Position"][2]
  377.                     )
  378.                   )
  379.         except Exception,exc:
  380.             print "Warning: Saving Arrow entity failed"
  381.             print self.CreationProps["Name"],exc
  382.  
  383.  
  384.  
  385. class EntityParticleSystemState(EntityState):
  386.     def __init__(self,entity):
  387.         EntityState.__init__(self,entity)
  388.         self.Props["YGravity"]=entity.YGravity
  389.         self.Props["Friction"]=entity.Friction
  390.         self.Props["Friction"]=entity.Friction
  391.         self.Props["Friction2"]=entity.Friction2
  392.         self.Props["PPS"]=entity.PPS
  393.         self.Props["DeathTime"]=entity.DeathTime
  394.         self.Props["FollowFactor"]=entity.FollowFactor
  395.         self.Props["NormalVelocity"]=entity.NormalVelocity
  396.         self.Props["RandomVelocity"]=entity.RandomVelocity
  397.         self.Props["RandomVelocity_V"]=entity.RandomVelocity_V
  398.         self.Props["Time2Live"]=entity.Time2Live
  399.         self.Props["Time2Live_V"]=entity.Time2Live_V
  400.         self.Props["ParticleType"]=entity.ParticleType
  401.         self.Props["ObjectName"]=entity.ObjectName
  402.         self.Props["PersonNodeName"]=entity.PersonNodeName
  403.         self.Props["PersonName"]=entity.PersonName
  404.         self.Props["Velocity"]=entity.Velocity
  405.         self.Props["D"]=entity.D
  406.         self.Props["D1"]=entity.D1
  407.         self.Props["D2"]=entity.D2
  408.  
  409.  
  410.  
  411.  
  412. class EntityFireState(EntityState):
  413.     def __init__(self,entity):
  414.         EntityState.__init__(self,entity)
  415.         self.Props["Intensity"]=entity.Intensity
  416.         self.Props["FireParticleType"]=entity.FireParticleType
  417.  
  418.  
  419.     def SaveCreation(self,file,aux_dir):
  420.         if not self.SpecialProps["Parent"]:
  421.             EntityState.SaveCreation(self,file,aux_dir)
  422.         else:
  423.             parent=Bladex.GetEntity(self.SpecialProps["Parent"])
  424.             if parent.Person:
  425.                 EntityState.SaveCreation(self,file,aux_dir)
  426.  
  427.  
  428.     def SaveProperties(self,file,aux_dir):
  429.         if not self.SpecialProps["Parent"]:
  430.             EntityState.SaveProperties(self,file,aux_dir)
  431.         else:
  432.             parent=Bladex.GetEntity(self.SpecialProps["Parent"])
  433.             if parent.Person:
  434.                 EntityState.SaveProperties(self,file,aux_dir)
  435.  
  436.  
  437.  
  438.  
  439.  
  440. class EntityCameraState(EntityState):
  441.     def __init__(self,entity):
  442.         EntityState.__init__(self,entity)
  443.         self.Props["PViewType"]=entity.PViewType
  444. ##        self.Props["Returns"]=entity.Returns
  445.         #self.Props["LookAtTime"]=entity.LookAtTime
  446.         self.Props["Dist"]=entity.Dist
  447.         #self.Props["EarthQuake"]=entity.EarthQuake  # Falta Lectura
  448.         self.Props["EarthQuakeFactor"]=entity.EarthQuakeFactor
  449.         self.Props["TPos"]=entity.TPos
  450.         self.Props["TAng"]=entity.TAng
  451.         self.Props["TType"]=entity.TType
  452.         self.Props["SType"]=entity.SType
  453.         #self.Props["ChangeNodeFunc"]=entity.ChangeNodeFunc #REVISAR
  454.  
  455.         # La cßmara es un caso especial, no la destruyo, pero guardo su estado interno.
  456.     def SaveCreation(self,file,aux_dir):
  457.         file.write('\n\n\n')
  458.         file.write('o=Bladex.GetEntity("Camera")\n')
  459.         file.write('if o is None:\n\to=Bladex.CreateEntity("%s","Entity Camera",%f,%f,%f)' %
  460.                        (self.CreationProps["Name"],
  461.                         self.CreationProps["Position"][0],
  462.                         self.CreationProps["Position"][1],
  463.                         self.CreationProps["Position"][2]
  464.                        )
  465.                    )
  466.         file.write('\n\n\n')
  467.  
  468.  
  469.  
  470.  
  471.  
  472. class EntitySlidingAreaState(EntityState):
  473.     def __init__(self,entity):
  474.         EntityState.__init__(self,entity)
  475.         self.Props["SlidingSurface"]=entity.SlidingSurface 
  476.         self.Displacement=entity.Displacement 
  477.         self.SpecialProps["OnStopFunc"]=entity.OnStopFunc
  478.  
  479.         self.Limit = entity.DisplacementLimit
  480.         self.V_D = entity.V_D
  481.         self.A_D = entity.A_D
  482.         self.IsStopped = entity.IsStopped
  483.  
  484.     def SaveProperties(self,file,aux_dir):        
  485.         EntityState.SaveProperties(self,file,aux_dir)
  486.         file.write('o.Displacement=%s\n'%( str(self.Displacement)))
  487.  
  488.     def SaveSpecialProperties(self,file,aux_dir):
  489.         EntityState.SaveSpecialProperties(self,file,aux_dir)
  490.         SavePickDataAux(file,aux_dir,self.SpecialProps["OnStopFunc"],'o.OnStopFunc=%s\n')
  491.         if not self.IsStopped:
  492.             file.write('o.SlideTo(%s,%s,%s)\n'%( str(self.Limit),str(self.V_D),str(self.A_D)))
  493.  
  494.  
  495. class EntityWaterState(EntityState):
  496.     def __init__(self,entity):
  497.         EntityState.__init__(self,entity)
  498.         self.Props["Color"]=entity.Color
  499.         self.SpecialProps["TouchFluidFunc"]=entity.TouchFluidFunc
  500.         #self.Props["Reflection"]=entity.Reflection  #S≤lo Escritura
  501.         #self.Props["Transparency"]=entity.Transparency  #S≤lo Escritura
  502.  
  503.     def SaveSpecialProperties(self,file,aux_dir):
  504.         EntityState.SaveSpecialProperties(self,file,aux_dir)
  505.         SavePickDataAux(file,aux_dir,self.SpecialProps["TouchFluidFunc"],'o.TouchFluidFunc=%s\n')
  506.  
  507.  
  508.  
  509. class EntitySoundState(EntityState):
  510.     def __init__(self,entity):
  511.         EntityState.__init__(self,entity)
  512.         self.Props["SendNotify"]=entity.SendNotify
  513.         self.Props["MinDistance"]=entity.MinDistance
  514.         self.Props["MaxDistance"]=entity.MaxDistance
  515.         self.Props["Volume"]=entity.Volume
  516.         self.Props["BaseVolume"]=entity.BaseVolume
  517.  
  518.     def SaveCreation(self,file,aux_dir):
  519.         EntityState.SaveCreation(self,file,aux_dir)
  520.         file.write('o.SetObjectSound("%s")\n'%self.CreationProps["Name"])
  521.  
  522. class EntityMagicMissileState(EntityState):
  523.     def __init__(self,entity):
  524.         EntityState.__init__(self,entity)
  525.         self.Props["Flick"]=entity.Flick
  526.         self.Props["CastShadows"]=entity.CastShadows
  527.         self.Props["Intensity"]=entity.Intensity
  528.         self.Props["Precission"]=entity.Precission
  529.         self.Props["Intensity2"]=entity.Intensity2
  530.         self.Props["Color"]=entity.Color
  531.  
  532.  
  533. class EntityElectricBoltState(EntityState):
  534.     def __init__(self,entity):
  535.         EntityState.__init__(self,entity)
  536.         self.Props["Active"]=entity.Active
  537.         self.Props["Damage"]=entity.Damage
  538.         self.Props["MinSectorLength"]=entity.MinSectorLength
  539.         self.Props["MaxAmplitude"]=entity.MaxAmplitude
  540.         self.Props["Target"]=entity.Target
  541.         self.Props["OuterGlowColor"]=entity.OuterGlowColor
  542.         self.Props["InnerGlowColor"]=entity.InnerGlowColor
  543.         self.Props["CoreGlowColor"]=entity.CoreGlowColor
  544.  
  545.  
  546. class EntityPoolState(EntityState):
  547.     def __init__(self,entity):
  548.         EntityState.__init__(self,entity)
  549.         self.Props["DeepColor"]=entity.DeepColor
  550.         self.Props["Color"]=entity.Color
  551.  
  552.  
  553.  
  554.  
  555. class EntityParticleState(EntityState):
  556.     def __init__(self,entity):
  557.         EntityState.__init__(self,entity)
  558.         self.Props["ObjCTest"]=entity.ObjCTest
  559.         self.Props["Friction"]=entity.Friction
  560.         self.Props["Friction2"]=entity.Friction2
  561.         self.Props["DeathTime"]=entity.DeathTime
  562.         self.Props["Velocity"]=entity.Velocity
  563.         self.Props["Gravity"]=entity.Gravity
  564.  
  565.  
  566.  
  567.  
  568.  
  569. class EntityDecalState(EntityState):
  570.     def __init__(self,entity):
  571.         EntityState.__init__(self,entity)
  572.         self.Props["Alpha"]=entity.Alpha
  573.         self.Props["ZoomS"]=entity.ZoomS
  574.         self.Props["ZoomT"]=entity.ZoomT
  575.         self.Props["OriginS"]=entity.OriginS
  576.         self.Props["OriginT"]=entity.OriginT
  577.         self.Props["Angle"]=entity.Angle
  578.         self.Props["BlendMode"]=entity.BlendMode
  579.         self.Props["Texture"]=entity.Texture
  580.         self.Props["Color"]=entity.Color
  581.  
  582.  
  583.  
  584.  
  585. class EntityLavaState(EntityState):
  586.     def __init__(self,entity):
  587.         EntityState.__init__(self,entity)
  588.         self.Props["TextureName"]=entity.TextureName
  589.         self.Props["Zoom"]=entity.Zoom
  590.         self.SpecialProps["TouchFluidFunc"]=entity.TouchFluidFunc
  591.  
  592.     def SaveSpecialProperties(self,file,aux_dir):
  593.         EntityState.SaveSpecialProperties(self,file,aux_dir)
  594.         SavePickDataAux(file,aux_dir,self.SpecialProps["TouchFluidFunc"],'o.TouchFluidFunc=%s\n')
  595.  
  596.  
  597.  
  598. class EntityBipedState(EntityState):
  599.     def __init__(self,entity):
  600.         EntityState.__init__(self,entity)
  601.         #self.Props["LastSound"]=entity.LastSound #Solo lectura
  602.         #self.Props["LastSoundPosition"]=entity.LastSoundPosition #Solo lectura
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609. class EntityPersonState(EntityBipedState):
  610.     def __init__(self,entity):
  611.         EntityBipedState.__init__(self,entity)
  612.         self.Props["CombatDistFlag"]=entity.CombatDistFlag
  613.         #self.Props["Mask"]=entity.Mask
  614.         #self.Props["MutilationsMask"]=entity.MutilationsMask #S≤lo Escritura
  615.         #self.Props["EnemyARange"]=entity.EnemyARange
  616.         self.Props["Level"]=entity.Level
  617.         self.Props["Gof"]=entity.Gof
  618.         self.Props["Gob"]=entity.Gob
  619.         self.Props["Aim"]=entity.Aim
  620.         self.Props["Tr"]=entity.Tr
  621.         self.Props["Tl"]=entity.Tl
  622.         self.Props["Run"]=entity.Run
  623.         self.Props["Sneak"]=entity.Sneak
  624.         #self.Props["ShortStep"]=entity.ShortStep
  625.         #self.Props["Attack"]=entity.Attack #Solo lectura
  626.         #self.Props["Block"]=entity.Block #Solo lectura
  627.         self.Props["ContinuousBlock"]=entity.ContinuousBlock
  628.         self.Props["Blind"]=entity.Blind
  629.         self.Props["Deaf"]=entity.Deaf
  630.         self.Props["GoToSneaking"]=entity.GoToSneaking
  631.         self.Props["GoToJogging"]=entity.GoToJogging
  632.         #self.Props["InDestructorAttack"]=entity.InDestructorAttack
  633.         #self.Props["Heard"]=entity.Heard
  634.         #self.Props["Seen"]=entity.Seen
  635.         self.Props["PartialLevel"]=entity.PartialLevel
  636.         self.Props["Angle"]=entity.Angle
  637.         self.Props["Life"]=entity.Life
  638.         self.Props["Energy"]=entity.Energy
  639.         self.Props["Wuea"]=entity.Wuea
  640.         self.Props["BlockingPropensity"]=entity.BlockingPropensity
  641.         #self.Props["LastTimeSeen"]=entity.LastTimeSeen
  642.         self.Props["Alpha"]=entity.Alpha
  643.         #self.Props["Inventory"]=entity.Inventory
  644.         self.Props["CombatGroup"]=entity.CombatGroup
  645. ##        self.Props["RasterModeZ"]=entity.RasterModeZ #Chapuza de Jose y Manuel
  646. ##        self.Props["RasterModeAlpha"]=entity.RasterModeAlpha #Chapuza de Jose y Manuel
  647.         #self.Props["EnemyLastSeen"]=entity.EnemyLastSeen #Solo lectura
  648.         #self.Props["InitPos"]=entity.InitPos #Solo lectura
  649.         #self.Props["AttackList"]=entity.AttackList
  650.         self.Props["MeshName"]=entity.MeshName
  651.         self.SpecialProps["EnterPrimaryAAFunc"]=entity.EnterPrimaryAAFunc
  652.         self.SpecialProps["EnterSecondaryAAFunc"]=entity.EnterSecondaryAAFunc
  653.         self.SpecialProps["EnterCloseFunc"]=entity.EnterCloseFunc
  654.         self.SpecialProps["EnterLargeFunc"]=entity.EnterLargeFunc
  655.         self.SpecialProps["AnmEndedFunc"]=entity.AnmEndedFunc
  656.         self.SpecialProps["DelayNoSeenFunc"]=entity.DelayNoSeenFunc
  657.         self.SpecialProps["RouteEndedFunc"]=entity.RouteEndedFunc
  658.         self.SpecialProps["ImHurtFunc"]=entity.ImHurtFunc
  659.         self.SpecialProps["ImDeadFunc"]=entity.ImDeadFunc
  660.         self.SpecialProps["EnemyDeadFunc"]=entity.EnemyDeadFunc
  661.         self.SpecialProps["NoAllowedAreaFunc"]=entity.NoAllowedAreaFunc
  662.         self.SpecialProps["EnemyNoAllowedAreaFunc"]=entity.EnemyNoAllowedAreaFunc
  663.         #self.Props["OnHit"]=entity.OnHit
  664.         self.SpecialProps["CharSeeingEnemyFunc"]=entity.CharSeeingEnemyFunc
  665.         self.SpecialProps["AnmTranFunc"]=entity.AnmTranFunc
  666.         self.SpecialProps["TakeFunc"]=entity.TakeFunc
  667.         self.SpecialProps["ThrowFunc"]=entity.ThrowFunc
  668.         self.SpecialProps["MutilateFunc"]=entity.MutilateFunc
  669.         self.SpecialProps["CombatDistFlag"]=entity.CombatDistFlag
  670.  
  671.         #self.Props["WillCrashInFloor"]=entity.WillCrashInFloor #S≤lo Escritura
  672.         #self.Props["CurrentAreas"]=entity.CurrentAreas #S≤lo Escritura
  673.         #self.Props["Will1aaTo2aa"]=entity.Will1aaTo2aa    #S≤lo Escritura
  674.         #self.Props["OnFloor"]=entity.OnFloor              #S≤lo Escritura
  675.         #self.Props["InCombat"]=entity.InCombat            #S≤lo Escritura
  676.         #self.Props["DefenceNeeded"]=entity.DefenceNeeded  #S≤lo Escritura
  677.         #self.Props["AstarState"]=entity.AstarState         #S≤lo Escritura
  678.         #self.Props["RouteType"]=entity.RouteType           #S≤lo Escritura
  679.         #self.Props["BayRoute"]=entity.BayRoute             #S≤lo Escritura
  680.         #self.Props["CharType"]=entity.CharType             #S≤lo Escritura
  681.         #self.Props["CharTypeExt"]=entity.CharTypeExt       #S≤lo Escritura
  682.         #self.Props["AnimFullName"]=entity.AnimFullName     #S≤lo Escritura
  683.         #self.Props["AnimName"]=entity.AnimName             #S≤lo Escritura
  684.         #self.Props["InvRightBack"]=entity.InvRightBack     #S≤lo Lectura
  685.         #self.Props["InvLeftBack"]=entity.InvLeftBack       #S≤lo Lectura
  686.         #self.Props["ActiveEnemy"]=entity.ActiveEnemy       #S≤lo Escritura
  687.         #self.Props["InvRight"]=entity.InvRight             #S≤lo Lectura
  688.         #self.Props["InvLeft"]=entity.InvLeft               #S≤lo Lectura
  689.         #self.Props["InvLeft2"]=entity.InvLeft2             #S≤lo Lectura
  690.         #self.Props["Dist2Floor"]=entity.Dist2Floor          #S≤lo Escritura
  691.  
  692.         self.InitInventory(entity)
  693.  
  694.  
  695.     def SaveSpecialProperties(self,file,aux_dir):
  696. ##        EntityState.SaveSpecialProperties(self,file,aux_dir)
  697.         name=self.CreationProps["Name"]
  698.         # Es lo mismo que el general excepto las funciones
  699.         if self.SpecialProps["SubscribedLists"]:
  700.             file.write('GameStateAux.SetSubscribedLists(o,%s)\n'%self.SpecialProps["SubscribedLists"])
  701.  
  702.         if self.SpecialProps["InternalState"]:
  703.             value=self.SpecialProps["InternalState"]
  704.             if not (DefaultValues.has_key("InternalState") and DefaultValues["InternalState"]==value):
  705.                 if type(value) is types.StringType:
  706.                     file.write('o.InternalState="%s"\n'%(value))
  707.                 else:
  708.                    file.write('o.InternalState=%s\n'%(str(value)))
  709.             file.write('\n')
  710.  
  711.         if not self.InWorld:
  712.             file.write('darfuncs.HideBadGuy("%s")\n'%(self.CreationProps["Name"],))
  713.         file.write('\n\n')
  714.  
  715.     def InitInventory(self,entity):
  716.         inv=entity.GetInventory()
  717.         self.Inventory={}
  718.         self.Inventory["Objects"]=[]
  719.         for i in range(inv.nObjects):
  720.             self.Inventory["Objects"].append(inv.GetObject(i))
  721.  
  722.         self.Inventory["Weapons"]=[]
  723.         for i in range(inv.nWeapons):
  724.             self.Inventory["Weapons"].append(inv.GetWeapon(i))
  725.  
  726.         self.Inventory["Shields"]=[]
  727.         for i in range(inv.nShields):
  728.             self.Inventory["Shields"].append(inv.GetShield(i))
  729.  
  730.         self.Inventory["Quivers"]=[]
  731.         for i in range(inv.nQuivers):
  732.             self.Inventory["Quivers"].append(inv.GetQuiver(i))
  733.  
  734.         self.Inventory["Keys"]=[]
  735.         for i in range(inv.nKeys):
  736.             self.Inventory["Keys"].append(inv.GetKey(i))
  737.  
  738.         self.Inventory["SpecialKeys"]=[]
  739.         for i in range(inv.nSpecialKeys):
  740.             self.Inventory["SpecialKeys"].append(inv.GetSpecialKey(i))
  741.  
  742.         self.Inventory["Tablets"]=[]
  743.         for i in range(inv.nTablets):
  744.             self.Inventory["Tablets"].append(inv.GetTablet(i))
  745.  
  746.         self.Inventory["InvLeft"]=entity.InvLeft
  747.         self.Inventory["InvLeft2"]=entity.InvLeft2
  748.         self.Inventory["InvRight"]=entity.InvRight
  749.         self.Inventory["InvLeftBack"]=entity.InvLeftBack
  750.         self.Inventory["InvRightBack"]=entity.InvRightBack
  751.  
  752.  
  753.  
  754.     def SaveStatePass2(self,file,aux_dir):
  755.         #print "begin PersonEntity.SaveStatePass2() "
  756.         EntityBipedState.SaveStatePass2(self,file,aux_dir)
  757.  
  758.         file.write('\no=Bladex.GetEntity("%s")\n'%(self.CreationProps["Name"]))
  759.         file.write('inv=o.GetInventory()\n')
  760.         for i in self.Inventory["Objects"]:
  761.             #inv.AddObject(i)
  762.             file.write('inv.AddObject("%s")\n'%(i,))
  763.  
  764.         for i in self.Inventory["Weapons"]:
  765.             file.write('GameStateAux.AddWeaponToInventory(inv,"%s")\n'%(i,))
  766.  
  767.         for i in self.Inventory["Shields"]:
  768.             #inv.AddShield(i)
  769.             #Breakings.SetBreakableWS(i)
  770.             file.write('inv.AddShield("%s")\n'%(i,))
  771.             real_ent=Bladex.GetEntity(i)
  772.             try:
  773.                 a=real_ent.Data.brkobjdata
  774.                 file.write('Breakings.SetBreakableWS("%s")\n'%(i,))
  775.                 #print weapon_name,"is breakable."
  776.             except:
  777.                 pass
  778.  
  779.         for i in self.Inventory["Quivers"]:
  780.             #obj=CreateEntAux(i,"Weapon")
  781.             #ItemTypes.ItemDefaultFuncs(obj)
  782.             #inv.AddQuiver(i)
  783.             file.write('GameStateAux.AddQuiverToInventory(inv,"%s")\n'%(i,))
  784.  
  785.         for i in self.Inventory["Keys"]:
  786.             #inv.AddKey(i)
  787.             file.write('inv.AddKey("%s")\n'%(i,))
  788.  
  789.         for i in self.Inventory["SpecialKeys"]:
  790.             #inv.AddSpecialKey(i)
  791.             file.write('inv.AddSpecialKey("%s")\n'%(i,))
  792.  
  793.         for i in self.Inventory["Tablets"]:
  794.             #inv.AddTablet(i)
  795.             file.write('inv.AddTablet("%s")\n'%(i,))
  796.  
  797.         if self.Inventory["InvLeft"]:
  798.             #inv.LinkLeftHand(Inventory["InvLeft"])
  799.             file.write('inv.LinkLeftHand("%s")\n'%(self.Inventory["InvLeft"],))
  800.             # SetBreakable?
  801.  
  802.         if self.Inventory["InvLeft2"]:
  803.             #inv.LinkLeftHand2(Inventory["InvLeft2"])
  804.             file.write('inv.LinkLeftHand2("%s")\n'%(self.Inventory["InvLeft2"],))
  805.             # SetBreakable?
  806.  
  807.         if self.Inventory["InvRight"]:
  808.             #inv.LinkRightHand(Inventory["InvRight"])
  809.             file.write('inv.LinkRightHand("%s")\n'%(self.Inventory["InvRight"],))
  810.             # SetBreakable?
  811.  
  812.         if self.Inventory["InvRightBack"]:
  813.             #inv.LinkBack(Inventory["InvRightBack"])
  814.             file.write('inv.LinkBack("%s")\n'%(self.Inventory["InvRightBack"],))
  815.             # SetBreakable?
  816.  
  817.         if self.Inventory["InvLeftBack"]:
  818.             #inv.LinkBack(Inventory["InvLeftBack"])
  819.             file.write('inv.LinkBack("%s")\n'%(self.Inventory["InvLeftBack"],))
  820.             # SetBreakable?
  821.             
  822.             
  823.         #print "end PersonEntity.SaveStatePass2() "
  824.  
  825.  
  826.  
  827.     def SaveCreation(self,file,aux_dir):
  828.         file.write('\n\n\n')
  829.         try:
  830.             file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f,"Person")\n' %
  831.                     (self.CreationProps["Name"],
  832.                      self.CreationProps["Kind"],
  833.                      self.CreationProps["Position"][0],
  834.                      self.CreationProps["Position"][1],
  835.                      self.CreationProps["Position"][2]
  836.                     )
  837.                   )
  838.         except Exception,exc:
  839.             print "Warning: Saving Person entity failed"
  840.             print self.CreationProps["Name"],exc
  841.  
  842.  
  843.  
  844. class EntitiesStateAux:
  845.     def __init__(self,EntClass):
  846.         self.EntClass=EntClass
  847.         self.Entities=[]
  848.  
  849.     def AddEntityState(self,entity):
  850.         self.Entities.append(self.EntClass(entity))
  851.  
  852.     def SaveStates(self,file,aux_dir):
  853.         file.write('# There are %d entities\n\n'%(len(self.Entities),))
  854.         for i in self.Entities:
  855.             i.SaveState(file,aux_dir)
  856.  
  857.     def SaveStatesPass2(self,file,aux_dir):
  858.         for i in self.Entities:
  859.             i.SaveStatePass2(file,aux_dir)
  860.  
  861.     def DestroyEntities(self):
  862.         for i in self.Entities:
  863.             if i.CreationProps["Name"]!="Camera":
  864.                 realent=Bladex.GetEntity(i.CreationProps["Name"])
  865.                 realent.SubscribeToList("Pin")
  866.         self.Entities=[]
  867.  
  868.  
  869.  
  870.  
  871. ##class PersonEntitiesStateAux:
  872. ##    def DestroyEntities(self):
  873. ##        for i in self.Entities:
  874. ##            realent=Bladex.GetEntity(i.CreationProps["Name"])
  875. ##            inv=realent.GetInventory()
  876. ##            realent.SubscribeToList("Pin")
  877. ##        self.Entities=[]
  878.  
  879.  
  880.  
  881. class EntitiesState:
  882.     def __init__(self):
  883.         self.State={}
  884.         #self.State["Entity"]=EntitiesStateAux(EntityState)
  885.         self.State["Entity Object"]=EntitiesStateAux(EntityObjectState)
  886.         self.State["Entity PhysicObject"]=EntitiesStateAux(EntityPhysicState)
  887.         self.State["Entity Weapon"]=EntitiesStateAux(EntityWeaponState)
  888.         self.State["Entity Arrow"]=EntitiesStateAux(EntityArrowState)
  889.         self.State["Entity Actor"]=EntitiesStateAux(EntityActorState)
  890.         self.State["Entity Biped"]=EntitiesStateAux(EntityBipedState)
  891.         self.State["Entity Person"]=EntitiesStateAux(EntityPersonState)
  892.         self.State["Entity Spot"]=EntitiesStateAux(EntitySpotState)
  893.         self.State["Entity PrtclSys"]=EntitiesStateAux(EntityParticleSystemState)
  894.         self.State["Entity Particle System D1"]=EntitiesStateAux(EntityParticleSystemState)
  895.         self.State["Entity Particle System D2"]=EntitiesStateAux(EntityParticleSystemState)
  896.         self.State["Entity Particle System D3"]=EntitiesStateAux(EntityParticleSystemState)
  897.         self.State["Entity Particle System Dobj"]=EntitiesStateAux(EntityParticleSystemState)
  898.         self.State["Entity Particle System Dperson"]=EntitiesStateAux(EntityParticleSystemState)
  899.         self.State["Entity Fire"]=EntitiesStateAux(EntityFireState)
  900.         #self.State["Entity Dynamic Fire"]=EntitiesStateAux(EntityDynamicFireState)
  901.         self.State["Entity Camera"]=EntitiesStateAux(EntityCameraState)
  902.         self.State["Entity Water"]=EntitiesStateAux(EntityWaterState)
  903.         #self.State["Entity Trail"]=EntitiesStateAux(EntityTrailState)
  904.         self.State["Entity Sound"]=EntitiesStateAux(EntitySoundState)
  905.         self.State["Entity Magic Missile"]=EntitiesStateAux(EntityMagicMissileState)
  906.         self.State["Entity ElectricBolt"]=EntitiesStateAux(EntityElectricBoltState)
  907.         self.State["Entity Pool"]=EntitiesStateAux(EntityPoolState)
  908.         self.State["Entity Particle"]=EntitiesStateAux(EntityParticleState)
  909.         self.State["Entity Decal"]=EntitiesStateAux(EntityDecalState)
  910.         self.State["Entity Lava"]=EntitiesStateAux(EntityLavaState)
  911.         self.State["Entity Sliding Area"]=EntitiesStateAux(EntitySlidingAreaState)
  912.         #self.State["Sparks"]=EntitiesStateAux(EntityObjectState)
  913.         #self.State["Clients"]=EntitiesStateAux(EntityObjectState)
  914.         #self.State["Auras"]=EntitiesStateAux(EntityObjectState)
  915.  
  916.     def GetState(self):
  917.         for i in range(Bladex.nEntities()):
  918.             entity=Bladex.GetEntity(i)
  919.             kind=entity.Kind
  920.             state=None
  921.  
  922.             if kind in self.State.keys():
  923.                 self.State[kind].AddEntityState(entity)
  924.             else: # Estamos con una entidad con BOD
  925.                 if entity.Static:
  926.                     self.State["Entity Object"].AddEntityState(entity)
  927.                 elif entity.Person:
  928.                     self.State["Entity Person"].AddEntityState(entity)
  929.                 elif entity.Weapon:
  930.                     self.State["Entity Weapon"].AddEntityState(entity)
  931.                 elif entity.Arrow:
  932.                     self.State["Entity Arrow"].AddEntityState(entity)
  933.                 elif entity.Physic:
  934.                     self.State["Entity PhysicObject"].AddEntityState(entity)
  935. ##                elif entity.Actor:
  936. ##                    self.State["Entity Actor"].AddEntityState(entity)
  937.  
  938.  
  939.     def SaveStatePass1(self,file,aux_dir):
  940.         for i in self.State.keys():
  941.             file.write('############################################################\n')
  942.             file.write('# Entities %s\n'%(i,))
  943.             if i not in NotSave:
  944.                 self.State[i].SaveStates(file,aux_dir)
  945.             file.write('\n\n')
  946.  
  947.     def SaveStatePass2(self,file,aux_dir):
  948.         for i in self.State.keys():
  949.             if i not in NotSave:
  950.                 self.State[i].SaveStatesPass2(file,aux_dir)
  951.             file.write('\n\n')
  952.  
  953.  
  954.     def DestroyEntities(self):
  955.         for i in self.State.keys():
  956.             if i not in NotSave:
  957.                 self.State[i].DestroyEntities()
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969. class MainCharState(EntityPersonState):
  970.     "Clase para grabar el estado del jugador. Temporal"
  971.     def __init__(self,entity):
  972.         if not entity:
  973.             return
  974.         EntityPersonState.__init__(self,entity)
  975.         inv=entity.GetInventory()
  976.         self.Inventory={}
  977.         self.Inventory["Objects"]=[]
  978.         for i in range(inv.nObjects):
  979.             self.Inventory["Objects"].append(self.__GetObjAux(inv.GetObject(i)))
  980.  
  981.         self.Inventory["Weapons"]=[]
  982.         for i in range(inv.nWeapons):
  983.             self.Inventory["Weapons"].append(self.__GetObjAux(inv.GetWeapon(i)))
  984.  
  985.         self.Inventory["Shields"]=[]
  986.         for i in range(inv.nShields):
  987.             self.Inventory["Shields"].append(self.__GetObjAux(inv.GetShield(i)))
  988.  
  989.         self.Inventory["Quivers"]=[]
  990.         for i in range(inv.nQuivers):
  991.             self.Inventory["Quivers"].append(self.__GetObjAux(inv.GetQuiver(i)))
  992.  
  993.         self.Inventory["Keys"]=[]
  994.         for i in range(inv.nKeys):
  995.             self.Inventory["Keys"].append(self.__GetObjAux(inv.GetKey(i)))
  996.  
  997.         self.Inventory["SpecialKeys"]=[]
  998.         for i in range(inv.nSpecialKeys):
  999.             self.Inventory["SpecialKeys"].append(self.__GetObjAux(inv.GetSpecialKey(i)))
  1000.  
  1001.         self.Inventory["Tablets"]=[]
  1002.         for i in range(inv.nTablets):
  1003.             self.Inventory["Tablets"].append(self.__GetObjAux(inv.GetTablet(i)))
  1004.  
  1005.         self.Inventory["InvLeft"]=self.__GetObjAux(entity.InvLeft)
  1006.         self.Inventory["InvLeft2"]=self.__GetObjAux(entity.InvLeft2)
  1007.         self.Inventory["InvRight"]=self.__GetObjAux(entity.InvRight)
  1008.         self.Inventory["InvLeftBack"]=self.__GetObjAux(entity.InvLeftBack)
  1009.         self.Inventory["InvRightBack"]=self.__GetObjAux(entity.InvRightBack)
  1010.  
  1011.  
  1012.     def __GetBOD(self,ent_kind):
  1013.         RM=BBLib.GetResourceManager()
  1014.         for i in range(RM.NResources(BBLib.B_CID_OBJDSCR)):
  1015.             if RM.IsResourceLoaded(BBLib.B_CID_OBJDSCR,i):
  1016.                 if RM.GetResourceName(BBLib.B_CID_OBJDSCR,i)==ent_kind:
  1017.                     return RM.GetResourceFile(BBLib.B_CID_OBJDSCR,i)
  1018.         return None
  1019.  
  1020.     def __GetObjAux(self,obj):
  1021.         if not obj:
  1022.             return None
  1023.         objKind=Bladex.GetEntity(obj).Kind
  1024.         return (obj,objKind,self.__GetBOD(objKind))
  1025.  
  1026.  
  1027.     def SaveCreation(self,file):
  1028.         file.write('\n\n\n')
  1029.         file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f,"Person")\n' %
  1030.                     (self.CreationProps["Name"],
  1031.                      self.CreationProps["Kind"],
  1032.                      self.CreationProps["Position"][0],
  1033.                      self.CreationProps["Position"][1],
  1034.                      self.CreationProps["Position"][2]
  1035.                     )
  1036.                   )
  1037.  
  1038.  
  1039.     def SaveInventory(self,file_name):
  1040.         f=open('../../Save/'+file_name,'wt')
  1041.         p=cPickle.Pickler(f)
  1042.         temp={}
  1043.         temp["Life"]=self.Props["Life"]
  1044.         temp["Level"]=self.Props["Level"]
  1045.         temp["PartialLevel"]=self.Props["PartialLevel"]
  1046.         
  1047.         p.dump((self.CreationProps,temp,self.Inventory))
  1048.         f.close()
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055. def CreateEntAux(obj_tuple,obj_kind):
  1056.     obj=Bladex.GetEntity(obj_tuple[0])
  1057.     if not obj:
  1058.             BBLib.ReadBOD(obj_tuple[2])
  1059.             obj=Bladex.CreateEntity(obj_tuple[0],obj_tuple[1],0,0,0,obj_kind)
  1060.     return obj
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.  
  1067. def CreateMainCharWithProps(props):
  1068.     CreationProps=props[0]
  1069.     Props=props[1]
  1070.     Inventory=props[2]
  1071.  
  1072.     import Basic_Funcs
  1073.     import AniSound
  1074.     import Reference
  1075.     import Breakings
  1076.     import ItemTypes
  1077.  
  1078.     char=Bladex.CreateEntity("Player1",CreationProps["Kind"],0,0,0,"Person")
  1079.     char.Data=Basic_Funcs.PlayerPerson(char)
  1080.     inv=char.GetInventory()
  1081.     AniSound.AsignarSonidosCaballero('Player1')
  1082.  
  1083.     char.Level=Props["Level"]
  1084.     char.PartialLevel=Props["PartialLevel"]
  1085.     char.Life=Props["Life"]
  1086.     char.Energy=Props["Energy"]
  1087.  
  1088.     for i in Inventory["Objects"]:
  1089.         CreateEntAux(i,"Physic")
  1090.         inv.AddObject(i[0])
  1091.  
  1092.     for i in Inventory["Weapons"]:
  1093.         obj=CreateEntAux(i,"Weapon")
  1094.         object_flag=Reference.GiveObjectFlag(i[0])
  1095.         if object_flag == Reference.OBJ_BOW:
  1096.             inv.AddBow(i[0])
  1097.         else:
  1098.             flag=Reference.GiveWeaponFlag(i[0])
  1099.             #inv.AddWeapon(i[0],flag)
  1100.             inv.AddWeapon(i[0])
  1101.         Breakings.SetBreakableWS(i[0])
  1102.  
  1103.     for i in Inventory["Shields"]:
  1104.         CreateEntAux(i,"Weapon")
  1105.         inv.AddShield(i[0])
  1106.         Breakings.SetBreakableWS(i[0])
  1107.  
  1108.     for i in Inventory["Quivers"]:
  1109.         obj=CreateEntAux(i,"Weapon")
  1110.         ItemTypes.ItemDefaultFuncs(obj)
  1111.         inv.AddQuiver(i[0])
  1112.  
  1113.     for i in Inventory["Keys"]:
  1114.         CreateEntAux(i,"Physic")
  1115.         inv.AddKey(i[0])
  1116.  
  1117.     for i in Inventory["SpecialKeys"]:
  1118.         CreateEntAux(i,"Physic")
  1119.         inv.AddSpecialKey(i[0])
  1120.  
  1121.     for i in Inventory["Tablets"]:
  1122.         CreateEntAux(i,"Physic")
  1123.         inv.AddTablet(i[0])
  1124.  
  1125.     if Inventory["InvLeft"]:
  1126.         CreateEntAux(Inventory["InvLeft"],"Physic")
  1127.         inv.LinkLeftHand(Inventory["InvLeft"][0])
  1128.  
  1129.     if Inventory["InvLeft2"]:
  1130.         CreateEntAux(Inventory["InvLeft2"],"Physic")
  1131.         inv.LinkLeftHand2(Inventory["InvLeft2"][0])
  1132.  
  1133.     if Inventory["InvRight"]:
  1134.         CreateEntAux(Inventory["InvRight"],"Physic")
  1135.         inv.LinkRightHand(Inventory["InvRight"][0])
  1136.  
  1137.     if Inventory["InvLeftBack"]:
  1138.         CreateEntAux(Inventory["InvLeftBack"],"Physic")
  1139.         inv.LinkBack(Inventory["InvLeftBack"][0])
  1140.  
  1141.     if Inventory["InvRightBack"]:
  1142.         CreateEntAux(Inventory["InvRightBack"],"Physic")
  1143.         inv.LinkBack(Inventory["InvRightBack"][0])
  1144.  
  1145.  
  1146. def RestoreMainCharState(filename):
  1147.   f=open('../../Save/'+filename,'rt')
  1148.   u=cPickle.Unpickler(f)
  1149.   props=u.load()
  1150.   CreateMainCharWithProps(props)
  1151.   print "Main char created from file",filename
  1152.   f.close()
  1153.  
  1154. def SaveMainCharState(filename):
  1155.   ent=Bladex.GetEntity('Player1')
  1156.   ent_state=MainCharState(ent)
  1157.   ent_state.SaveInventory(filename)
  1158.  
  1159.  
  1160.  
  1161. class SectorState:
  1162.     def __init__(self):
  1163.         self.Index=-1
  1164.         self.OnEnter=None
  1165.         self.OnLeave=None
  1166.         self.OnHit=None
  1167.         self.OnWalkOn=None
  1168.         self.OnWalkOut=None
  1169.         self.Active=None
  1170.         self.ActiveSurface=None
  1171.         self.Save=0
  1172.         self.BreakInfo=None
  1173.  
  1174.     def GetState(self,idx):
  1175.         s=Bladex.GetSector(idx)
  1176.         if s:
  1177.             self.Index=s.Index
  1178.             self.OnEnter=s.OnEnter
  1179.             self.OnLeave=s.OnLeave
  1180.             self.OnHit=s.OnHit
  1181.             self.OnWalkOn=s.OnWalkOn
  1182.             self.OnWalkOut=s.OnWalkOut
  1183.             self.Active=s.Active
  1184.             self.ActiveSurface=s.ActiveSurface
  1185.             self.BreakInfo=s.BreakInfo
  1186.             if s.Active!=1 or s.BreakInfo or s.OnEnter or s.OnLeave or s.OnWalkOn or s.OnWalkOut: #s.OnHit
  1187.                 self.Save=1
  1188.  
  1189.     def SaveState(self,file,aux_dir):
  1190.         if(self.Save):
  1191.             file.write('s=Bladex.GetSector(%d)\n'%(self.Index))
  1192.             self.__SaveCallbackFunction(file,"OnEnter",aux_dir,self.OnEnter)
  1193.             self.__SaveCallbackFunction(file,"OnLeave",aux_dir,self.OnLeave)
  1194. ##            self.__SaveCallbackFunction(file,"OnHit",aux_dir,self.OnHit)
  1195.             self.__SaveCallbackFunction(file,"OnWalkOn",aux_dir,self.OnWalkOn)
  1196.             self.__SaveCallbackFunction(file,"OnWalkOut",aux_dir,self.OnWalkOut)
  1197.             file.write('s.Active=%d\n'%(self.Active))
  1198.             if self.BreakInfo:
  1199.                 file.write('s.BreakInfo=%s\n'%(str(self.BreakInfo)))
  1200. ##            file.write('s.ActiveSurface=%d'%(self.ActiveSurface))
  1201.             file.write('\n\n')
  1202.  
  1203.  
  1204.     def __SaveCallbackFunction(self,file,cbname,aux_dir,function):
  1205.         r_cb_str='s.%s='%(cbname,)
  1206.         SavePickDataAux(file,aux_dir,function,r_cb_str+'%s\n')
  1207.  
  1208.  
  1209. class MapState:
  1210.     def __init__(self):
  1211.         self.SectorsState=[]
  1212.  
  1213.     def GetState(self):
  1214.         nSectors=Bladex.nSectors()
  1215.         for i in range(nSectors):
  1216.             s=SectorState()
  1217.             s.GetState(i)
  1218.             if s.Save:
  1219.                 self.SectorsState.append(s)
  1220.  
  1221.     def SaveState(self,file,aux_dir):
  1222.         for i in self.SectorsState:
  1223.             i.SaveState(file,aux_dir)
  1224.  
  1225.  
  1226. class TriggerSectorState:
  1227.     def __init__(self):
  1228.         self.Index=-1
  1229.         self.OnEnter=None
  1230.         self.OnLeave=None
  1231.         self.Data=None
  1232.         self.Name=None
  1233.  
  1234.     def GetState(self,idx):
  1235.         self.Name=Bladex.GetTriggerSectorName(idx)
  1236.         self.Index=idx
  1237.         self.OnEnter=Bladex.GetTriggerSectorFunc(self.Name,"OnEnter")
  1238.         self.OnLeave=Bladex.GetTriggerSectorFunc(self.Name,"OnLeave")
  1239.         self.Data=Bladex.GetTriggerSectorData(self.Name)
  1240.  
  1241.     def SaveState(self,file,aux_dir):
  1242.  
  1243. ##        self.__SaveCallbackFunction(file,"OnEnter",aux_dir,self.OnEnter)
  1244. ##        self.__SaveCallbackFunction(file,"OnLeave",aux_dir,self.OnLeave)
  1245. ##        self.__SavePickledData(file,aux_dir,self.Data)
  1246.         SavePickDataAux(file,aux_dir,self.OnEnter,"Bladex.SetTriggerSectorFunc('"+self.Name,"','OnEnter','%s')")
  1247.         SavePickDataAux(file,aux_dir,self.OnLeave,"Bladex.SetTriggerSectorFunc('"+self.Name,"','OnLeave','%s')")
  1248.         SavePickDataAux(file,aux_dir,self.Data,"Bladex.SetTriggerSectorData('"+self.Name,"','%s')")
  1249.         file.write('\n\n')
  1250.  
  1251.  
  1252. ##    def __SaveCallbackFunction(self,file,cbname,aux_dir,function):
  1253. ##        if(function):
  1254. ##            filename="%s/%s.dat"%(aux_dir,id(function))
  1255. ##            funcfile=open(filename,"wt")
  1256. ##            p=cPickle.Pickler(funcfile)
  1257. ##            p.dump(function)
  1258. ##            funcfile.close()
  1259. ##
  1260. ##            file.write('Bladex.SetTriggerSectorFunc("%s","%s",GameStateAux.GetPickledData("%s"))\n'%(self.Name,cbname,filename))
  1261. ##
  1262. ##    def __SavePickledData(self,file,aux_dir,data):
  1263. ##        if(data):
  1264. ##            filename="%s/%s.dat"%(aux_dir,id(data))
  1265. ##            funcfile=open(filename,"wt")
  1266. ##            p=cPickle.Pickler(funcfile)
  1267. ##            p.dump(data)
  1268. ##            funcfile.close()
  1269. ##
  1270. ##            file.write('Bladex.SetTriggerSectorData("%s",GameStateAux.GetPickledData("%s"))\n'%(self.Name,filename))
  1271.  
  1272.  
  1273.  
  1274. class TriggersState:
  1275.     def __init__(self):
  1276.         self.SectorsState=[]
  1277.  
  1278.     def GetState(self):
  1279.         nSectors=Bladex.nTriggerSectors()
  1280.         for i in range(nSectors):
  1281.             s=SectorState()
  1282.             s.GetState(i)
  1283.             self.SectorsState.append(s)
  1284.  
  1285.     def SaveState(self,file,aux_dir):
  1286.         for i in self.SectorsState:
  1287.             i.SaveState(file,aux_dir)
  1288.  
  1289.  
  1290.  
  1291. class WorldState:
  1292.     def __init__(self):
  1293.         self.EntitiesState=EntitiesState()
  1294.         self.MapState=MapState()
  1295.         self.TriggersState=TriggersState()
  1296.         #print "__name__",__name__
  1297.  
  1298.     def GetState(self):
  1299.         self.EntitiesState.GetState()
  1300.         self.MapState.GetState()
  1301.  
  1302.     def SaveState(self,filename):
  1303.         import os
  1304.         aux_dir=(os.path.splitext(filename)[0])+"_files"
  1305.         if os.path.exists(aux_dir):
  1306.             shutil.rmtree(aux_dir)
  1307.         os.mkdir(aux_dir)
  1308.  
  1309.         self.SaveAutoBODs(aux_dir)
  1310. ##        self.SaveFunctions(aux_dir)
  1311.  
  1312.  
  1313.         # Ahora genero el script que al ejecutarse regenera el mundo
  1314.         file=open(filename,"wt")
  1315.         file.write('############################################################\n')
  1316.         file.write('#   Blade Game State %s\n'%(filename,))
  1317.         file.write('#   Do not modify\n')
  1318.         file.write('#   File created %s \n'%(time.asctime(time.gmtime(time.time())),))
  1319.         file.write('############################################################\n\n\n\n')
  1320.         file.write('import cPickle\n')
  1321.         file.write('import GameStateAux\n')
  1322.         file.write('import Breakings\n')
  1323.         file.write('import darfuncs\n')
  1324.         file.write('import Bladex\n\n\n\n')
  1325.         file.write('############################################################\n')
  1326.         file.write('#\n\n\n')
  1327.  
  1328.         file.write('Bladex.BeginLoadGame()\n')
  1329.         file.write('GameStateAux.aux_dir="%s"\n'%(aux_dir,))
  1330.         file.write('Bladex.SetCurrentMap(\"%s\")\n'%(Bladex.GetCurrentMap(),))
  1331.         file.write('Bladex.SetSaveInfo(%s)\n'%(str(Bladex.GetSaveInfo(),)))
  1332.  
  1333.         ResFiles=self.GetMMPFiles()
  1334.         file.write('print "About to load MMPs"\n')
  1335.         file.write('GameStateAux.LoadMMPs(%s)\n'%(str(ResFiles),))
  1336.  
  1337.         ResFiles=self.GetBMPFiles()
  1338.         file.write('print "About to load BMPs"\n')
  1339.         #file.write('GameStateAux.LoadBMPs(%s)\n'%(str(ResFiles),))
  1340.         self.SaveList('GameStateAux.LoadBMPs(%s)\n',ResFiles,file)
  1341.  
  1342.         ResFiles=self.GetAlphaBMPFiles()
  1343.         file.write('print "About to load Alpha BMPs"\n')
  1344.         #file.write('GameStateAux.LoadAlphaBMPs(%s)\n'%(str(ResFiles),))
  1345.         self.SaveList('GameStateAux.LoadAlphaBMPs(%s)\n',ResFiles,file)
  1346.  
  1347.         file.write('print "About to load Sounds"\n')
  1348.         file.write('Bladex.LoadSoundDataBase("%s/Sounds.sdb")\n'%(aux_dir,))
  1349.         Bladex.SaveSoundDataBase('%s/Sounds.sdb'%(aux_dir,))
  1350.  
  1351. ##        ResFiles=self.GetBODFiles()
  1352. ##        file.write('print "About to load BODs"\n')
  1353. ##        #file.write('GameStateAux.LoadBODs(%s)\n'%(str(ResFiles),))
  1354. ##        self.SaveList('GameStateAux.LoadBODs(%s)\n',ResFiles,file)
  1355.  
  1356.         file.write('print "About to load AutoBODs"\n')
  1357.         file.write('GameStateAux.LoadAutoBODs("%s")\n\n\n'%(aux_dir,))
  1358.         file.write('print "End AutoBODs ----------------------------"\n')
  1359.  
  1360. ##        self.SaveParticleSystems(file)
  1361.         psys_data_file=aux_dir+'/psys_data.dat'
  1362.         Bladex.SaveParticleSystemsData(psys_data_file)
  1363.         file.write('Bladex.LoadParticleSystemsData("%s")\n'%(psys_data_file,))
  1364.  
  1365.         self.SaveTimers(file)
  1366.  
  1367.         file.write('print "End Timers ----------------------------"\n')
  1368.         file.write('import PickInit\n')
  1369.         file.write('PickInit.Init()\n\n')
  1370.         file.write( 'execfile("../../Scripts/SolidMask.py")\n')
  1371.         file.write( 'execfile("../../Scripts/material.py")\n')
  1372.         file.write( 'execfile("../../Scripts/anisound.py")\n')
  1373.         file.write( 'execfile("../../Scripts/anm_def.py")\n')
  1374.         file.write( 'execfile("../../Scripts/StepSounds.py")\n')
  1375.         file.write( 'execfile("../../Scripts/enemies.py")\n')
  1376.         file.write( 'execfile("../../Scripts/Biped/Biped.py")\n')
  1377.         file.write( 'execfile("../../Scripts/anm_conv.py")\n')
  1378.         file.write( 'execfile("../../Scripts/anm_mdf.py")\n')
  1379.         file.write( 'execfile("../../Scripts/CommonResources.py")\n')
  1380. ##        file.write( 'execfile("../../Scripts/InitParticleSystems.py")\n')
  1381.         file.write( 'execfile("../../Scripts/AutoGenTextures.py")\n')
  1382.  
  1383.         file.write('Bladex.LoadWorld(\"%s")\n'%(Bladex.GetWorldFileName(),))
  1384.  
  1385. ##        file.write( '#\n')
  1386. ##        file.write( '# Timers\n')
  1387. ##        file.write( '#\n')
  1388. ##        file.write( 'Bladex.CreateTimer("Timer60",1.0/60.0)\n')
  1389. ##        file.write( 'Bladex.CreateTimer("Timer30",1.0/30.0)\n')
  1390. ##        file.write( 'Bladex.CreateTimer("Timer15",1.0/15.0)\n\n\n\n')
  1391.  
  1392.  
  1393. ##        self.EntitiesState.SaveStatePass1(file,aux_dir)
  1394.         ent_data_file=aux_dir+'/ent_data.dat'
  1395.         Bladex.SaveEntitiesData(ent_data_file)
  1396.         file.write('Bladex.LoadEntitiesData("%s")\n'%(ent_data_file,))
  1397.  
  1398.         import os
  1399.         import sys
  1400.         file.write('import sys\n')
  1401.         file.write('import os\n')
  1402.         file.write('sys.path.append("%s")\n\n'%(os.getcwd(),))
  1403.  
  1404. ##        print os.getcwd()
  1405.         file.write('try:\n')
  1406.         file.write('  execfile("DefFuncs.py")\n')
  1407.         file.write('except IOError:\n')
  1408.         file.write('  print "Can┤t find DefFuncs.py"\n\n\n')
  1409.  
  1410.         file.write('try:\n')
  1411.         file.write('  execfile("MusicEvents.py")\n')
  1412.         file.write('except IOError:\n')
  1413.         file.write('  print "Can╒┤ find MusicEvents.py"\n\n\n')
  1414.  
  1415.         file.write('try:\n')
  1416.         file.write('  execfile("TextureMaterials.py")\n')
  1417.         file.write('except IOError:\n')
  1418.         file.write('  print "Can╒┤ find TextureMaterials.py"\n\n\n')
  1419.  
  1420.         # Grabar las variables, funciones, ...
  1421.         self.SaveModules(file)
  1422.         self.SaveVars(file)
  1423.         self.SaveSounds(file)
  1424.         self.SaveSectors(file)
  1425.         self.SaveEntities(file)
  1426.  
  1427.         SavePickledObjects(file,aux_dir)
  1428.  
  1429.         self.SaveObjects(file,aux_dir)
  1430.         file.write( '\n')
  1431.         file.write('GameStateAux.InitGameState()\n')
  1432.  
  1433.  
  1434. ##        import PickInit
  1435. ##        PickInit.Init()
  1436.  
  1437.         self.MapState.SaveState(file,aux_dir)
  1438.         self.TriggersState.SaveState(file,aux_dir)
  1439.         self.EntitiesState.SaveStatePass2(file,aux_dir)
  1440.  
  1441.  
  1442.         file.write( '\n')
  1443.         file.write('# Scorer Data init\n')
  1444.         file.write('#\n')
  1445.         file.write('import Scorer\n')
  1446.         file.write('Scorer.ActivateScorer()\n\n')
  1447.         file.write('import CharStats\n')
  1448. ##        file.write('import PowDefWidgets\n')
  1449. ##        file.write('PowDefWidgets.CreateWidgest()\n')
  1450. ##        file.write('PowDefWidgets.Activate()\n')
  1451. ##        file.write('import GameTex\n')
  1452. ##        file.write('GameText.SetLanguage("Spanish")\n')
  1453.         file.write('execfile("../../Scripts/DefaultScorerData.py")\n\n')
  1454.  
  1455.         file.write('# Inicio del personaje y sus marcadores\n')
  1456.         file.write('char=Bladex.GetEntity("Player1")\n')
  1457.         file.write('Scorer.SetLevelLimits(0,CharStats.GetCharExperienceCost(char.CharType,0))\n')
  1458.         file.write('#Scorer.SetLevelBarValue(0)\n')
  1459.         file.write('#Scorer.SetLevelValue(0)\n')
  1460.         file.write('#\n')
  1461.         file.write('# Controls ( keyboard,mouse...) stuff\n')
  1462.         file.write('#\n')
  1463.         file.write('execfile("../../Scripts/InputInit.py")\n')
  1464.         file.write('import acts\n')
  1465.         file.write('acts.InitBindings("Player1")\n')
  1466.         file.write('try:\n')
  1467.         file.write('  execfile("../../Scripts/Control.py")\n')
  1468.         file.write('  print "BladeInit -> Executed Control.py"\n')
  1469.         file.write('except:\n')
  1470.         file.write('  execfile("../../Scripts/DefControl.py")\n')
  1471.         file.write('  print "BladeInit -> Executed DefControl.py"\n\n')
  1472.         file.write('#\n')
  1473.         file.write('# Menu\n')
  1474.         file.write('#\n')
  1475.         file.write('#execfile("../../Scripts/Menu.py")\n')
  1476.         file.write('import Menu\n')
  1477.         file.write('Menu.InitMenuKeys()\n')        
  1478.         file.write('print "About to load global functions"\n')
  1479.         file.write('GameStateAux.LoadGlobalFuncs("%s")\n\n\n'%(aux_dir,))
  1480.         file.write('Bladex.SetTime(%d)\n'%(Bladex.GetTime(),))
  1481.         file.write('Bladex.DoneLoadGame()\n\n\n')
  1482.         file.write('#   Good Bye! (Enjoy The Silence)\n')
  1483.         file.close()
  1484.  
  1485.  
  1486.     def SaveVars(self,file):
  1487.         "Saves variables in the global scope."
  1488.  
  1489.         global_vars=self.GetGlobalsAux(types.IntType)
  1490.         file.write('\n# Integer variables\n')
  1491.         for i in global_vars:
  1492.             file.write('%s=%s\n'%(str(i[0]),str(i[1])))
  1493.  
  1494.         global_vars=self.GetGlobalsAux(types.FloatType)
  1495.         file.write('\n# Float variables\n')
  1496.         for i in global_vars:
  1497.             file.write('%s=%s\n'%(str(i[0]),str(i[1])))
  1498.  
  1499.         global_vars=self.GetGlobalsAux(types.StringType)
  1500.         file.write('\n# String variables\n')
  1501.         for i in global_vars:
  1502.             file.write('%s="%s"\n'%(str(i[0]),str(i[1])))
  1503.  
  1504.  
  1505.     def SaveSounds(self,file):
  1506.         "Saves sound objects in the global scope."
  1507.  
  1508.         gmadlig=Bladex.CreateSound('../../sounds/golpe_maderamed.wav', 'GolpeMaderaMediana')
  1509.         snd_vars=self.GetGlobalsAux(type(gmadlig))
  1510.  
  1511.         file.write('\n# Sound objects\n')
  1512.         snd_vars_names=[]
  1513.         for i in snd_vars:
  1514.             snd_vars_names.append((str(i[0]),i[1].Name))
  1515.  
  1516.         for i in snd_vars_names:
  1517.             file.write('%s=Bladex.GetSound("%s")\n'%(i[0],i[1]))
  1518.  
  1519.  
  1520.     def SaveEntities(self,file):
  1521.         "Saves entity objects in the global scope."
  1522.  
  1523.         ent=Bladex.GetEntity(0)
  1524.         ent_vars=self.GetGlobalsAux(type(ent))
  1525.  
  1526.         file.write('\n# Entity objects\n')
  1527.         ent_vars_names=[]
  1528.         for i in ent_vars:
  1529.             ent_vars_names.append((str(i[0]),i[1].Name))
  1530.  
  1531.         for i in ent_vars_names:
  1532.             file.write('%s=Bladex.GetEntity("%s")\n'%(i[0],i[1]))
  1533.         file.write('\n\n')
  1534.  
  1535.     def SaveObjects(self,file,aux_dir):
  1536.         "Saves objects (from Lib/Object.py) in the global scope."
  1537.  
  1538.         import Objects
  1539.         obj=Objects.DinObj()
  1540.         obj_vars=self.GetGlobalsAux(type(obj))
  1541.  
  1542.         file.write('\n# Object objects\n')
  1543.         obj_vars_names=[]
  1544.         omit_objs=["__main__.Flecha"]
  1545.         for i in obj_vars:
  1546.             print i
  1547.             if i is not self and str(i[1].__class__):
  1548.                 if str(i[0])!="state":
  1549.                     obj_vars_names.append((str(i[0]),i[1]))
  1550. ##                print "WorldState.SaveObjects() Added"
  1551.                 else:
  1552.                     print "Omited state"
  1553.  
  1554.         for i in obj_vars_names:
  1555.             try:
  1556. ##                filename="%s/%s.dat"%(aux_dir,id(i[1]))
  1557. ##                funcfile=open(filename,"wt")
  1558. ##                p=cPickle.Pickler(funcfile)
  1559. ##                p.dump(i[1])
  1560. ##                funcfile.close()
  1561.  
  1562. ##                file.write('%s=GameStateAux.GetPickledData("%s")\n'%(i[0],filename))
  1563.  
  1564.                 SavePickDataAux(file,aux_dir,i[1],i[0]+"=%s\n")
  1565.             except Exception,exc:
  1566.                 print "Failed saving of",i
  1567.                 print exc
  1568.  
  1569.         file.write('\n\n')
  1570.  
  1571.  
  1572.     def SaveSectors(self,file):
  1573.         "Saves sector objects in the global scope."
  1574.  
  1575.         sec=Bladex.GetSector(0)
  1576.         sec_vars=self.GetGlobalsAux(type(sec))
  1577.  
  1578.         file.write('\n\n# Sector objects\n')
  1579.         sec_vars_names=[]
  1580.         for i in sec_vars:
  1581.             sec_vars_names.append((str(i[0]),i[1].Index))
  1582.  
  1583.         for i in sec_vars_names:
  1584.             file.write('%s=Bladex.GetSector(%d)\n'%(i[0],i[1]))
  1585.         file.write('\n\n')
  1586.  
  1587.  
  1588.  
  1589.     def SaveModules(self,file):
  1590.         "Saves modules in the global scope."
  1591.  
  1592.         import string
  1593.         OmitModules=["__builtins__","Scorer","Menu","GameText","GameState","GameStateAux"]
  1594.         global_mods=self.GetGlobalsAux(types.ModuleType)
  1595.         file.write('\n# Modules\n')
  1596.         for i in global_mods:
  1597.             if i[0] not in OmitModules and string.find(i[0],"AnimationSet")==-1 and string.find(i[0],"Widget")==-1:
  1598.                 file.write('import %s\n'%(i[0],))
  1599.  
  1600.  
  1601.     def GetGlobalsAux(self,req_type):
  1602.         g=GetGlobals()
  1603.         elems=[]
  1604.         for i in g.items():
  1605.             if type(i[1])==req_type:
  1606.                 elems.append(i)
  1607.         return elems
  1608.  
  1609. ##    def SaveFunctions(self,aux_dir):
  1610. ##        import types
  1611. ##        funcs=self.GetGlobalsAux(types.FunctionType)
  1612. ##        for i in funcs:
  1613. ##            #print i
  1614. ##            fn=i[1]
  1615. ##            filename="%s/%s.dat"%(aux_dir,id(fn))
  1616. ##            funcfile=open(filename,"wt")
  1617. ##            code=marshal.dumps(fn.func_code)
  1618. ##            p=cPickle.Pickler(funcfile)
  1619. ##            p.dump((fn.func_name,code,fn.func_defaults,fn.func_doc))
  1620. ##            funcfile.close()
  1621.  
  1622.  
  1623.     def SaveAutoBODs(self,path):
  1624.         # Primero voy a guardar los BODs que se generan automßticamente
  1625.         B_CID_AUTO_OBJDSCR=BBLib.B_CID_AUTO_OBJDSCR
  1626.         RM=BBLib.GetResourceManager()
  1627.         nAutoBODs=RM.NResources(B_CID_AUTO_OBJDSCR)
  1628.         for i in range(nAutoBODs):
  1629.             name="%s/%s.BOD"%(path,RM.GetResourceName(B_CID_AUTO_OBJDSCR,i))
  1630.             RM.SaveResource(B_CID_AUTO_OBJDSCR,i,name)
  1631.  
  1632.     def SaveList(self,command,lista,file):
  1633.         nchunks=len(lista)/5
  1634.         for i in range(nchunks):
  1635.             lolimit=5*i
  1636.             l=lista[lolimit:lolimit+5]
  1637.             file.write(command%(str(l),))
  1638.  
  1639.     def __AuxGetResFiles(self,kind):
  1640.         RM=BBLib.GetResourceManager()
  1641.         nRes=RM.NResources(kind)
  1642.         ResFiles=[]
  1643.         for i in range(nRes):
  1644.             res_file=RM.GetResourceFile(kind,i)
  1645.             if res_file not in ResFiles:
  1646.                 ResFiles.append(res_file)
  1647.         return ResFiles
  1648.  
  1649.     def __AuxGetResFilesAndNames(self,kind):
  1650.         RM=BBLib.GetResourceManager()
  1651.         nRes=RM.NResources(kind)
  1652.         ResFiles=[]
  1653.         for i in range(nRes):
  1654.             res_file=RM.GetResourceFile(kind,i)
  1655.             res_name=RM.GetResourceName(kind,i)
  1656.             if res_file not in ResFiles:
  1657.                 ResFiles.append((res_file,res_name))
  1658.         return ResFiles
  1659.  
  1660.  
  1661. ##    def SaveParticleSystems(self,file):
  1662. ##
  1663. ##        file.write('\n# Particle Systems\n')
  1664. ##        nParts=Bladex.GetnParticleGType()
  1665. ##        for i in range(nParts):
  1666. ##            PSystem=Bladex.GetParticleGType(i)
  1667. ##            PSystemName=PSystem[0]
  1668. ##            if PSystemName=="Energia2":
  1669. ##                print "Warning, omiting particle system Energia2"
  1670. ##                continue
  1671. ##            
  1672. ##            file.write('Bladex.AddParticleGType("%s","%s",%i,%i)\n\n'%(PSystem))
  1673. ##
  1674. ##            RedValues=[]
  1675. ##            GreenValues=[]
  1676. ##            BlueValues=[]
  1677. ##            AlphaValues=[]
  1678. ##            SizeValues=[]
  1679. ##            for j in range(PSystem[3]):
  1680. ##                PSValues=Bladex.GetParticleGVal(PSystemName,j)
  1681. ##                RedValues.append(PSValues[0])
  1682. ##                GreenValues.append(PSValues[1])
  1683. ##                BlueValues.append(PSValues[2])
  1684. ##                AlphaValues.append(PSValues[3])
  1685. ##                SizeValues.append(PSValues[4])
  1686. ##
  1687. ##            file.write('RedValues=%s\n'%str(RedValues))
  1688. ##            file.write('GreenValues=%s\n'%str(GreenValues))
  1689. ##            file.write('BlueValues=%s\n'%str(BlueValues))
  1690. ##            file.write('AlphaValues=%s\n'%str(AlphaValues))
  1691. ##            file.write('SizeValues=%s\n'%str(SizeValues))
  1692. ##            file.write('\n')
  1693. ##
  1694. ##            file.write('for i in range(%d):\n'%(PSystem[3]))
  1695. ##            file.write('  Bladex.SetParticleGVal("%s",i,RedValues[i],GreenValues[i],BlueValues[i],AlphaValues[i],SizeValues[i])\n\n\n'%(PSystemName,))
  1696.   
  1697.     def SaveTimers(self,file):
  1698.  
  1699.         file.write('\n# Timers\n')
  1700.         nTimers=Bladex.GetnTimers()
  1701.         for i in range(nTimers):
  1702.             cTimer=Bladex.GetTimerInfo(i)
  1703.             file.write('Bladex.CreateTimer("%s",%f)\n\n'%(cTimer[0],cTimer[1]))
  1704.         file.write('\n')
  1705.  
  1706.  
  1707.     def GetMMPFiles(self):
  1708.         return self.__AuxGetResFiles(BBLib.B_CID_BITMAP)
  1709.  
  1710.     def GetBODFiles(self):
  1711.         return self.__AuxGetResFiles(BBLib.B_CID_OBJDSCR)
  1712.  
  1713.     def GetBMPFiles(self):
  1714.         return self.__AuxGetResFilesAndNames(BBLib.B_CID_BMP)
  1715.  
  1716.     def GetAlphaBMPFiles(self):
  1717.         return self.__AuxGetResFilesAndNames(BBLib.B_CID_ALPHABMP)
  1718.  
  1719.  
  1720. def GetGlobals():
  1721.     import sys
  1722.     try:
  1723.         1 + ''
  1724.     except:
  1725.         frame = sys.exc_info()[2].tb_frame.f_back
  1726.  
  1727.     while frame:
  1728.         globs=frame.f_globals
  1729.         frame=frame.f_back
  1730.  
  1731.     return globs
  1732.